#! usr/bin/python3.6
"""
    Module initially auto generated using V5Automation files from CATIA V5 R28 on 2020-07-06 14:02:20.222384

    .. warning::
        The notes denoted "CAA V5 Visual Basic Help" are to be used as reference only.
        They are there as a guide as to how the visual basic / catscript functions work
        and thus help debugging in pycatia.
        
"""
from pycatia.hybrid_shape_interfaces.hybrid_shape_direction import HybridShapeDirection
from pycatia.in_interfaces.reference import Reference
from pycatia.knowledge_interfaces.length import Length
from pycatia.knowledge_interfaces.real_param import RealParam
from pycatia.mec_mod_interfaces.hybrid_shape import HybridShape


class HybridShapeSpline(HybridShape):
    """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384)

                | System.IUnknown
                |     System.IDispatch
                |         System.CATBaseUnknown
                |             System.CATBaseDispatch
                |                 System.AnyObject
                |                     MecModInterfaces.HybridShape
                |                         HybridShapeSpline
                | 
                | Represents the hybrid shape spline feature object.
                | Role: To access the data of the hybrid shape spline feature object. This data
                | includes:
                | 
                |     The support surface
                |     The control points
                |     The tension at each control point
                |     The curvature radius at each control point
                | 
                | Use the CATIAHybridShapeFactory to create a HybridShapeAffinity
                | object.
                | 
                | See also:
                |     HybridShapeFactory
    
    """

    def __init__(self, com_object):
        super().__init__(com_object)
        self.hybrid_shape_spline = com_object

    def add_point(self, ip_ia_point: Reference) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub AddPoint(Reference ipIAPoint)
                | 
                |     Add a new point .
                | 
                |     Parameters:
                | 
                |         iPoint
                |             Point element.

        :param Reference ip_ia_point:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.AddPoint(ip_ia_point.com_object)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'add_point'
        # # vba_code = """
        # # Public Function add_point(hybrid_shape_spline)
        # #     Dim ipIAPoint (2)
        # #     hybrid_shape_spline.AddPoint ipIAPoint
        # #     add_point = ipIAPoint
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def add_point_with_constraint_explicit(self, ip_ia_point: Reference, ip_ia_dir_tangency: HybridShapeDirection,
                                           i_tangency_norm: float, i_inverse_tangency: int,
                                           ip_ia_dir_curvature: HybridShapeDirection,
                                           i_curvature_radius: float) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub AddPointWithConstraintExplicit(Reference ipIAPoint,
                | HybridShapeDirection ipIADirTangency,
                | double iTangencyNorm,
                | long iInverseTangency,
                | HybridShapeDirection ipIADirCurvature,
                | double iCurvatureRadius)
                | 
                |     Add a new point with explicit tangency and curvature.
                | 
                |     Parameters:
                | 
                |         ipIAPoint
                |             Point element. 
                |         ipIADirTangency
                |             Tangent direction. 
                |         iTangencyNorm
                |             Tension. 
                |         iInverseTangency
                |             Flag to reverse tangent direction (value can be 1 or -1).
                |             
                |         ipIADirCurvature
                |             Curvature direction. 
                |         iCurvatureRadius
                |             Curvature radius value.

        :param Reference ip_ia_point:
        :param HybridShapeDirection ip_ia_dir_tangency:
        :param float i_tangency_norm:
        :param int i_inverse_tangency:
        :param HybridShapeDirection ip_ia_dir_curvature:
        :param float i_curvature_radius:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.AddPointWithConstraintExplicit(ip_ia_point.com_object,
                                                                       ip_ia_dir_tangency.com_object, i_tangency_norm,
                                                                       i_inverse_tangency,
                                                                       ip_ia_dir_curvature.com_object,
                                                                       i_curvature_radius)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'add_point_with_constraint_explicit'
        # # vba_code = """
        # # Public Function add_point_with_constraint_explicit(hybrid_shape_spline)
        # #     Dim ipIAPoint (2)
        # #     hybrid_shape_spline.AddPointWithConstraintExplicit ipIAPoint
        # #     add_point_with_constraint_explicit = ipIAPoint
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def add_point_with_constraint_from_curve(self, ip_ia_point: Reference, ip_ia_curve_cst: Reference,
                                             i_tangency_norm: float, i_invert_value: int, i_crv_cst_type: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub AddPointWithConstraintFromCurve(Reference ipIAPoint,
                | Reference ipIACurveCst,
                | double iTangencyNorm,
                | long iInvertValue,
                | long iCrvCstType)
                | 
                |     Add a new point with tangency/curvature from a curve.
                | 
                |     Parameters:
                | 
                |         ipIAPoint
                |             Point element. 
                |         ipIACurveCst
                |             Curvature direction. 
                |         iTangencyNorm
                |             tension factor for tangency. 
                |         iInvertValue
                |             Orientation for tangent 
                |         iCrvCstType
                |             Continuity type for Curve Constraint (1=Tangency , 2-=
                |             Curvature).

        :param Reference ip_ia_point:
        :param Reference ip_ia_curve_cst:
        :param float i_tangency_norm:
        :param int i_invert_value:
        :param int i_crv_cst_type:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.AddPointWithConstraintFromCurve(ip_ia_point.com_object,
                                                                        ip_ia_curve_cst.com_object, i_tangency_norm,
                                                                        i_invert_value, i_crv_cst_type)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'add_point_with_constraint_from_curve'
        # # vba_code = """
        # # Public Function add_point_with_constraint_from_curve(hybrid_shape_spline)
        # #     Dim ipIAPoint (2)
        # #     hybrid_shape_spline.AddPointWithConstraintFromCurve ipIAPoint
        # #     add_point_with_constraint_from_curve = ipIAPoint
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def get_closure(self) -> int:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetClosure() As long
                | 
                |     Gets whether the curve is closed.
                | 
                |     Parameters:
                | 
                |         oClosed
                |             Closing flag
                | 
                |             1
                |                 for a closed curve
                |             0
                |                 for an open curve

        :return: int
        :rtype: int
        """
        return self.hybrid_shape_spline.GetClosure()

    def get_constraint_type(self, i_pos: int) -> int:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetConstraintType(long iPos) As long
                | 
                |     Returns the ControlPoint type at the given position.
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position of the point to retrieve 
                |         oCstType
                |             Type of Control point
                |             (CstType=0 : not defined / CstType=1 : Explicit / CstType=2 : FromCurve)

        :param int i_pos:
        :return: int
        :rtype: int
        """
        return self.hybrid_shape_spline.GetConstraintType(i_pos)

    def get_curvature_radius(self, i_pos: int) -> Length:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetCurvatureRadius(long iPos) As Length
                | 
                |     Returns the curvature radius value for each point of the
                |     spline.
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position of the point in the spline.
                |             Legal values: first position is 1. The position cannot be 0.
                |             
                |         oRadius
                |             The curvature radius value at this point

        :param int i_pos:
        :return: Length
        :rtype: Length
        """
        return Length(self.hybrid_shape_spline.GetCurvatureRadius(i_pos))

    def get_direction_inversion(self, i_pos: int) -> int:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetDirectionInversion(long iPos) As long
                | 
                |     Gets the orientation of the tangent direction .
                | 
                |     Parameters:
                | 
                |         oInvertFlag
                |             invert flag = 1 No Inversion = -1 Invert 
                |         iPos
                |             Position of point in spline First Position is 1 Position 0 return
                |             E_FAIL

        :param int i_pos:
        :return: int
        :rtype: int
        """
        return self.hybrid_shape_spline.GetDirectionInversion(i_pos)

    def get_nb_control_point(self) -> int:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetNbControlPoint() As long
                | 
                |     Returns the number of control points.
                | 
                |     Parameters:
                | 
                |         oNbCtrPt
                |             The number of control points.

        :return: int
        :rtype: int
        """
        return self.hybrid_shape_spline.GetNbControlPoint()

    def get_point(self, i_pos: int) -> Reference:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetPoint(long iPos) As Reference
                | 
                |     Returns the Point at the given position.
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position of the point to retrieve 
                |         opIAPoint
                |             Type of Control point (TypeCtrPoint =1 : Explicit / TypeCtrPoint =2 : FromCurve)

        :param int i_pos:
        :return: Reference
        :rtype: Reference
        """
        return Reference(self.hybrid_shape_spline.GetPoint(i_pos))

    def get_point_constraint_explicit(self, i_pos: int, op_ia_dir_tangency: HybridShapeDirection,
                                      o_tangency_norm: float, o_inverse_tangency: int,
                                      op_ia_dir_curvature: HybridShapeDirection, o_curvature_radius: float) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub GetPointConstraintExplicit(long iPos,
                | HybridShapeDirection opIADirTangency,
                | double oTangencyNorm,
                | long oInverseTangency,
                | HybridShapeDirection opIADirCurvature,
                | double oCurvatureRadius)
                | 
                |     Returns the Constraint of the point at iPos.
                |     Available for Explicit Point Constraint type (CstType =1 from
                |     GetContraintType)
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position of the point to retrieve 
                |         opIADirTangency
                |             Tangent direction. 
                |         oTangencyNorm
                |             Tension. 
                |         oInverseTangency
                |             Flag to reverse tangent direction (value can be 1 or -1).
                |             
                |         opIADirCurvature
                |             Curvature direction. 
                |         oCurvatureRadius
                |             Curvature radius value.

        :param int i_pos:
        :param HybridShapeDirection op_ia_dir_tangency:
        :param float o_tangency_norm:
        :param int o_inverse_tangency:
        :param HybridShapeDirection op_ia_dir_curvature:
        :param float o_curvature_radius:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.GetPointConstraintExplicit(i_pos, op_ia_dir_tangency.com_object,
                                                                   o_tangency_norm, o_inverse_tangency,
                                                                   op_ia_dir_curvature.com_object, o_curvature_radius)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'get_point_constraint_explicit'
        # # vba_code = """
        # # Public Function get_point_constraint_explicit(hybrid_shape_spline)
        # #     Dim iPos (2)
        # #     hybrid_shape_spline.GetPointConstraintExplicit iPos
        # #     get_point_constraint_explicit = iPos
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def get_point_constraint_from_curve(self, i_pos: int, op_ia_curve_cst: Reference, o_tangency_norm: float,
                                        o_invert_value: int, o_crv_cst_type: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub GetPointConstraintFromCurve(long iPos,
                | Reference opIACurveCst,
                | double oTangencyNorm,
                | long oInvertValue,
                | long oCrvCstType)
                | 
                |     Returns the Constraint of the point at iPos.
                |     Available for FromCurve Point Constraint type (CstType =2 from
                |     GetContraintType)
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position of the point to retrieve 
                |         opIACurveCst
                |             Curvature direction. 
                |         oTangencyNorm
                |             tension factor for tangency. 
                |         oInvertValue
                |             Orientation for tangent 
                |         oCrvCstType
                |             Continuity type for Curve Constraint (1=Tangency , 2-=
                |             Curvature).

        :param int i_pos:
        :param Reference op_ia_curve_cst:
        :param float o_tangency_norm:
        :param int o_invert_value:
        :param int o_crv_cst_type:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.GetPointConstraintFromCurve(i_pos, op_ia_curve_cst.com_object, o_tangency_norm,
                                                                    o_invert_value, o_crv_cst_type)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'get_point_constraint_from_curve'
        # # vba_code = """
        # # Public Function get_point_constraint_from_curve(hybrid_shape_spline)
        # #     Dim iPos (2)
        # #     hybrid_shape_spline.GetPointConstraintFromCurve iPos
        # #     get_point_constraint_from_curve = iPos
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def get_point_position(self, ip_ia_point: Reference) -> int:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetPointPosition(Reference ipIAPoint) As long
                | 
                |     Returns the position of a given point.
                | 
                |     Parameters:
                | 
                |         ipIAPoint
                |             Point 
                |         oPos
                |             The position of the point (=0 Point Not in Spline)

        :param Reference ip_ia_point:
        :return: int
        :rtype: int
        """
        return self.hybrid_shape_spline.GetPointPosition(ip_ia_point.com_object)

    def get_spline_type(self) -> int:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetSplineType() As long
                | 
                |     Gets the spline type.
                | 
                |     Parameters:
                | 
                |         oType
                |             = 0 : Cubic Type Spline. = 1 : WilsonFowler Type Spline.

        :return: int
        :rtype: int
        """
        return self.hybrid_shape_spline.GetSplineType()

    def get_support(self) -> Reference:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetSupport() As Reference
                | 
                |     Gets the support surface.
                | 
                |     Parameters:
                | 
                |         oSupport
                |             Supporting surface for spline (if exist)

        :return: Reference
        :rtype: Reference
        """
        return Reference(self.hybrid_shape_spline.GetSupport())

    def get_tangent_norm(self, i_pos: int) -> RealParam:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Func GetTangentNorm(long iPos) As RealParam
                | 
                |     Returns the tension for each point of the spline.
                |     The tension is the tangent norm at the given point.
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position of the point in the spline.
                |             Legal values: first position is 1. The position cannot be 0.
                |             
                |         oTension
                |             The tension at this point

        :param int i_pos:
        :return: RealParam
        :rtype: RealParam
        """
        return RealParam(self.hybrid_shape_spline.GetTangentNorm(i_pos))

    def invert_direction(self, i_pos: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub InvertDirection(long iPos)
                | 
                |     Inverts the orientation of the tangent direction .
                | 
                |     Parameters:
                | 
                |         iPos
                |             Position of point in spline First Position is 1 Position 0 return
                |             E_FAIL

        :param int i_pos:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.InvertDirection(i_pos)

    def remove_all(self) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub RemoveAll()
                | 
                |     Removes all elements in the list of points.

        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.RemoveAll()

    def remove_control_point(self, i_pos: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub RemoveControlPoint(long iPos)
                | 
                |     Removes a point at the given position.
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position of the point to remove

        :param int i_pos:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.RemoveControlPoint(i_pos)

    def remove_curvature_radius_direction(self, i_pos: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub RemoveCurvatureRadiusDirection(long iPos)
                | 
                |     Removes Curvature Radius Direction for the given point of the
                |     spline.
                | 
                |     Parameters:
                | 
                |         iPos
                |             Position of point in spline First Position is 1 Position 0 return
                |             E_FAIL

        :param int i_pos:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.RemoveCurvatureRadiusDirection(i_pos)

    def remove_curvature_radius_value(self, i_pos: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub RemoveCurvatureRadiusValue(long iPos)
                | 
                |     Removes Curvature Radius Value for the given point of the
                |     spline.
                | 
                |     Parameters:
                | 
                |         iPos
                |             Position of point in spline First Position is 1 Position 0 return
                |             E_FAIL

        :param int i_pos:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.RemoveCurvatureRadiusValue(i_pos)

    def remove_support(self) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub RemoveSupport()
                | 
                |     Removes the support surface.

        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.RemoveSupport()

    def remove_tangent_direction(self, i_pos: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub RemoveTangentDirection(long iPos)
                | 
                |     Removes tangent Direction for the given point of the
                |     spline.
                | 
                |     Parameters:
                | 
                |         iPos
                |             Position of point in spline First Position is 1 Position 0 return
                |             E_FAIL

        :param int i_pos:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.RemoveTangentDirection(i_pos)

    def remove_tension(self, i_pos: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub RemoveTension(long iPos)
                | 
                |     Removes the Tension for the given point of the spline.
                | 
                |     Parameters:
                | 
                |         iPos
                |             Position of point in spline First Position is 1 Position 0 return
                |             E_FAIL

        :param int i_pos:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.RemoveTension(i_pos)

    def replace_point_at_position(self, i_pos: int, i_point: Reference) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub ReplacePointAtPosition(long iPos,
                | Reference iPoint)
                | 
                |     Replaces a point in the list at the given position.
                | 
                |     Parameters:
                | 
                |         oPoint
                |             Point 
                |         iPos
                |             Replace position

        :param int i_pos:
        :param Reference i_point:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.ReplacePointAtPosition(i_pos, i_point.com_object)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'replace_point_at_position'
        # # vba_code = """
        # # Public Function replace_point_at_position(hybrid_shape_spline)
        # #     Dim iPos (2)
        # #     hybrid_shape_spline.ReplacePointAtPosition iPos
        # #     replace_point_at_position = iPos
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def set_closing(self, i_closing_type: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub SetClosing(long iClosingType)
                | 
                |     Activates the closing option of the spline.
                | 
                |     Parameters:
                | 
                |         iClosingType
                |             The spline closing option

        :param int i_closing_type:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.SetClosing(i_closing_type)

    def set_point_after(self, i_pos: int, ip_ia_point: Reference) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub SetPointAfter(long iPos,
                | Reference ipIAPoint)
                | 
                |     Sets the Point After a given position.
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position reference (0 < position < Nbpt) 
                |         ipIAPoint
                |             Point

        :param int i_pos:
        :param Reference ip_ia_point:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.SetPointAfter(i_pos, ip_ia_point.com_object)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'set_point_after'
        # # vba_code = """
        # # Public Function set_point_after(hybrid_shape_spline)
        # #     Dim iPos (2)
        # #     hybrid_shape_spline.SetPointAfter iPos
        # #     set_point_after = iPos
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def set_point_before(self, i_pos: int, ip_ia_point: Reference) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub SetPointBefore(long iPos,
                | Reference ipIAPoint)
                | 
                |     Sets the Point Before a given position.
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position reference (1 < position < Nbpt+1) 
                |         ipIAPoint
                |             Point

        :param int i_pos:
        :param Reference ip_ia_point:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.SetPointBefore(i_pos, ip_ia_point.com_object)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'set_point_before'
        # # vba_code = """
        # # Public Function set_point_before(hybrid_shape_spline)
        # #     Dim iPos (2)
        # #     hybrid_shape_spline.SetPointBefore iPos
        # #     set_point_before = iPos
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def set_point_constraint_explicit(self, i_pos: int, ip_ia_dir_tangency: HybridShapeDirection,
                                      i_tangency_norm: float, i_inverse_tangency: int,
                                      ip_ia_dir_curvature: HybridShapeDirection, i_curvature_radius: float) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub SetPointConstraintExplicit(long iPos,
                | HybridShapeDirection ipIADirTangency,
                | double iTangencyNorm,
                | long iInverseTangency,
                | HybridShapeDirection ipIADirCurvature,
                | double iCurvatureRadius)
                | 
                |     Sets the Constraint of the point at iPos.
                |     Available for Explicit Point Constraint type (CstType =1 from
                |     GetContraintType)
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position of the point to retrieve 
                |         ipIADirTangency
                |             Tangent direction. 
                |         iTangencyNorm
                |             Tension. 
                |         iInverseTangency
                |             Flag to reverse tangent direction (value can be 1 or -1).
                |             
                |         ipIADirCurvature
                |             Curvature direction. 
                |         iCurvatureRadius
                |             Curvature radius value.

        :param int i_pos:
        :param HybridShapeDirection ip_ia_dir_tangency:
        :param float i_tangency_norm:
        :param int i_inverse_tangency:
        :param HybridShapeDirection ip_ia_dir_curvature:
        :param float i_curvature_radius:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.SetPointConstraintExplicit(i_pos, ip_ia_dir_tangency.com_object,
                                                                   i_tangency_norm, i_inverse_tangency,
                                                                   ip_ia_dir_curvature.com_object, i_curvature_radius)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'set_point_constraint_explicit'
        # # vba_code = """
        # # Public Function set_point_constraint_explicit(hybrid_shape_spline)
        # #     Dim iPos (2)
        # #     hybrid_shape_spline.SetPointConstraintExplicit iPos
        # #     set_point_constraint_explicit = iPos
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def set_point_constraint_from_curve(self, i_pos: int, ip_ia_curve_cst: Reference, i_tangency_norm: float,
                                        i_invert_value: int, i_crv_cst_type: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub SetPointConstraintFromCurve(long iPos,
                | Reference ipIACurveCst,
                | double iTangencyNorm,
                | long iInvertValue,
                | long iCrvCstType)
                | 
                |     Sets the Constraint of the point at iPos.
                |     Available for From Curve Point Constraint type (CstType =2 from
                |     GetContraintType)
                | 
                |     Parameters:
                | 
                |         iPos
                |             The position of the point to retrieve 
                |         ipIACurveCst
                |             Curvature direction. 
                |         iTangencyNorm
                |             tension factor for tangency. 
                |         iInvertValue
                |             Orientation for tangent 
                |         iCrvCstType
                |             Continuity type for Curve Constraint (1=Tangency , 2-=
                |             Curvature).

        :param int i_pos:
        :param Reference ip_ia_curve_cst:
        :param float i_tangency_norm:
        :param int i_invert_value:
        :param int i_crv_cst_type:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.SetPointConstraintFromCurve(i_pos, ip_ia_curve_cst.com_object, i_tangency_norm,
                                                                    i_invert_value, i_crv_cst_type)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'set_point_constraint_from_curve'
        # # vba_code = """
        # # Public Function set_point_constraint_from_curve(hybrid_shape_spline)
        # #     Dim iPos (2)
        # #     hybrid_shape_spline.SetPointConstraintFromCurve iPos
        # #     set_point_constraint_from_curve = iPos
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def set_spline_type(self, i_spline_type: int) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub SetSplineType(long iSplineType)
                | 
                |     Sets the spline type.
                | 
                |     Parameters:
                | 
                |         iSplineType
                |             The spline type
                |             Legal values: Cubic spline (0) or WilsonFowler (1)

        :param int i_spline_type:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.SetSplineType(i_spline_type)

    def set_support(self, i_support: Reference) -> None:
        """
        .. note::
            :class: toggle

            CAA V5 Visual Basic Help (2020-07-06 14:02:20.222384))
                | o Sub SetSupport(Reference iSupport)
                | 
                |     Sets the spline support surface.
                |     Have your "tangent direction" tangent to this support is
                |     recommended.
                | 
                |     Parameters:
                | 
                |         iSupport
                |             The spline support surface.
                |             Sub-element(s) supported (see 
                | 
                |         Boundary object): Face.

        :param Reference i_support:
        :return: None
        :rtype: None
        """
        return self.hybrid_shape_spline.SetSupport(i_support.com_object)
        # # # # Autogenerated comment: 
        # # some methods require a system service call as the methods expects a vb array object
        # # passed to it and there is no way to do this directly with python. In those cases the following code
        # # should be uncommented and edited accordingly. Otherwise completely remove all this.
        # # vba_function_name = 'set_support'
        # # vba_code = """
        # # Public Function set_support(hybrid_shape_spline)
        # #     Dim iSupport (2)
        # #     hybrid_shape_spline.SetSupport iSupport
        # #     set_support = iSupport
        # # End Function
        # # """

        # # system_service = self.application.system_service
        # # return system_service.evaluate(vba_code, 0, vba_function_name, [self.com_object])

    def __repr__(self):
        return f'HybridShapeSpline(name="{self.name}")'
